'''# Third_party'''
from openpyxl import *
from openpyxl.styles import *
from openpyxl.utils import *


class Result:

    def __repr__(self) -> str:
        return '该函数用来创建模块对应的sheet工作表用来存放脚本执行结果'

    '''构造函数'''
    def __init__(self) -> None:
        pass

    '''测试结果汇总写入；生成对应测试报告文件'''
    def resultHandle(self, resultsExcel_Paht, sheetName, collect='', cases=''):
        # 创建新表
        try:
            # 读取表
            wb = load_workbook(resultsExcel_Paht+'.xlsx')  # 读取
            for sheetKey in wb.sheetnames:
                if sheetName == sheetKey:
                    # 出现同名sheet表
                    sheetName += f"{len(wb.sheetnames)}"
                    # wb.remove(wb[sheetKey])  # 删除冲突sheet表
                else:
                    # sheet表不存在
                    pass

            ws = wb.create_sheet(sheetName, len(wb.sheetnames))  # 末尾创建sheet表

        except Exception as error:
            # 表不存在，新增表
            wb = Workbook()  # 新建
            ws = wb.create_sheet(sheetName, len(wb.sheetnames))  # 末尾创建sheet表

        sheetHeader = [
            ['数据说明', '数据值'],
            ['用例总数：', '0'],
            ['执行用例数量：', '0'],
            ['通过数量：', '0'],
            ['异常数量：', '0'],
            ['失败数量：', '0'],
            [' '],  # 换行
            [' '],  # 换行
            ['用例名称', '执行结果', '异常错误信息']
        ]

        '''表格样式准备------------------------------------------------------------------------------------------'''

        ws.column_dimensions[get_column_letter(1)].width = 30  # 第一列列宽 30
        ws.column_dimensions[get_column_letter(2)].width = 10  # 第二列列宽 10
        ws.column_dimensions[get_column_letter(3)].width = 50  # 第三列列宽 50

        # 预设单元格格式
        thin = Side(border_style="thin", color="000000")  # 边框样式
        border = Border(left=thin, right=thin, top=thin, bottom=thin)
        fill = PatternFill(patternType="solid", start_color="92d050")  # 填充样式
        align = Alignment(horizontal='center', vertical='center', wrap_text=True)  # 对齐方式

        # 预设字体样式
        HeardFont = Font(size=11, bold=True)  # 表头字体样式
        PassFont = Font(name='黑体', size=11, bold=True, color="00b050")  # 通过字体样式
        AbnormalFont = Font(name='黑体', size=11, bold=True, italic=True, color="ae8abe")  # 异常字体样式
        FailFont = Font(name='黑体', size=11, bold=True, color="ff0000")  # 未通过字体样式

        '''表格结构写入------------------------------------------------------------------------------------------'''
        for i in range(0, len(sheetHeader)):  # 行
            ws.row_dimensions[i+1].height = 40  # 行高

            for j in range(0, len(sheetHeader[i])):  # 列

                ws.cell(row=i+1, column=j+1).alignment = align

                # 判断是否为换行操作
                if sheetHeader[i][j] != ' ':
                    ws.cell(row=i + 1, column=j + 1).border = border  # 非换行添加边框
                    if '0' in sheetHeader[i]:
                        # 代表为非表头，不添加背景色
                        ws.cell(row=i+1, column=j+1).value = sheetHeader[i][j]

                    else:
                        # 代表表头，添加背景色
                        ws.cell(row=i+1, column=j+1).fill = fill
                        ws.cell(row=i + 1, column=j + 1).font = HeardFont
                        ws.cell(row=i+1, column=j+1).value = sheetHeader[i][j]

                else:
                    # 换行操作
                    pass

        '''表格数据写入------------------------------------------------------------------------------------------'''
        ws.cell(row=2, column=2).value = collect['total']  # 用例总数
        ws.cell(row=3, column=2).value = collect['implement']  # 执行用例数量
        ws.cell(row=4, column=2).value = collect['passNum']  # 通过用例数
        ws.cell(row=5, column=2).value = collect['abnormalNum']  # 异常用例数
        ws.cell(row=6, column=2).value = collect['failNum']  # 未通过用例数

        # 用例数据
        row = len(sheetHeader)  # 起始行
        for i in range(0, len(cases)):
            # ws.row_dimensions[row + 1].height = 30  # 行高
            for j in range(0, len(cases[i])):
                ws.cell(row=row + 1, column=j + 1).border = border  # 边框

                # 异常信息处理
                if j != 2:
                    ws.cell(row=row + 1, column=j + 1).alignment = align  # 居中

                else:
                    # 异常信息，不居中
                    ws.cell(row=row + 1, column=j + 1).alignment = Alignment(wrapText=True)  # 异常信息，数据自动换行

                # 测试结果字体处理
                if cases[i][j] == 'Pass':
                    ws.cell(row=row + 1, column=j + 1).font = PassFont  # 通过字体样式

                elif cases[i][j] == 'Fail':
                    ws.cell(row=row + 1, column=j + 1).font = FailFont  # 未通过字体样式

                elif cases[i][j] == '异常':
                    ws.cell(row=row + 1, column=j + 1).font = AbnormalFont  # 异常字体样式

                ws.cell(row=row + 1, column=j + 1).value = cases[i][j]  # 写入用例数据
            
            row += 1  # 行值变化

        # 保存文件
        wb.save(resultsExcel_Paht+'.xlsx')
        
        load_workbook(resultsExcel_Paht+'.xlsx')